package commun;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Locale;

import com.sun.org.apache.xml.internal.security.utils.Base64;



/**
 * 
 * Permet de stocker le SecureID.
 * 
 * @author Valentin Brémond
 *
 * @version 1.0
 *
 */
public abstract class SecureID
{
	/**
	 * Permet de calculer le hash du SecureID.
	 * 
	 * @return Le SecureID.
	 */
	public static String calculerSecureID ()
	{
		// On récupère l'heure du système
		GregorianCalendar calendrier = new GregorianCalendar ();
		
		int heure = calendrier.get (Calendar.HOUR_OF_DAY);
		int minutes = calendrier.get (Calendar.MINUTE);
		int jour = calendrier.get (Calendar.DAY_OF_MONTH);
		String jourComplet = calendrier.getDisplayName (Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.FRANCE);
		String moisComplet = calendrier.getDisplayName (Calendar.MONTH, Calendar.LONG, Locale.FRANCE);
		int annee = calendrier.get (Calendar.YEAR);
		String timestamp = new String ("" + System.currentTimeMillis () / 1000);
		
		// On concatène le timestamp avec les autres informations
		String secureID = heure + timestamp.substring (0, 2) + minutes + timestamp.substring (2, 4) + jour + timestamp.substring (4, 6) + jourComplet + timestamp.substring (6, 8) + moisComplet + timestamp.substring (8, 10) + annee;
		
		// Puis on hache le SecureID
		MessageDigest mda = null;
		try
		{
			mda = MessageDigest.getInstance ("SHA-512");
		}
		catch (NoSuchAlgorithmException e)
		{
			e.printStackTrace();
		}
		byte[] hash = mda.digest (secureID.getBytes ());
		
		String secureIDHashe = new String (Base64.encode (hash));
		
		return secureIDHashe;
	}
}
